{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/vitaldb/examples/blob/master/mbp_aki.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bpQy0pzwVUBL"
      },
      "source": [
        "# Calculation of AKI risk depending on BP during surgery\n",
        "In this example, we will calculate the risk of acute kidney injury (AKI) depending on blood pressure during surgery, using the VitalDB open dataset."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "SqQZp4YdV2tg"
      },
      "source": [
        "## Required libraries and datasets"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "9wmjfMpGN6_z",
        "outputId": "1064290f-6cf3-49fb-aeda-8b23b888be92"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Collecting vitaldb\n",
            "  Downloading vitaldb-1.4.5-py3-none-any.whl (56 kB)\n",
            "\u001b[?25l     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/56.7 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.7/56.7 kB\u001b[0m \u001b[31m1.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from vitaldb) (1.23.5)\n",
            "Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from vitaldb) (1.5.3)\n",
            "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from vitaldb) (2.31.0)\n",
            "Collecting wfdb (from vitaldb)\n",
            "  Downloading wfdb-4.1.2-py3-none-any.whl (159 kB)\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m160.0/160.0 kB\u001b[0m \u001b[31m10.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25hRequirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas->vitaldb) (2.8.2)\n",
            "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->vitaldb) (2023.3.post1)\n",
            "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->vitaldb) (3.3.2)\n",
            "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->vitaldb) (3.6)\n",
            "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->vitaldb) (2.0.7)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->vitaldb) (2023.11.17)\n",
            "Requirement already satisfied: SoundFile>=0.10.0 in /usr/local/lib/python3.10/dist-packages (from wfdb->vitaldb) (0.12.1)\n",
            "Requirement already satisfied: matplotlib>=3.2.2 in /usr/local/lib/python3.10/dist-packages (from wfdb->vitaldb) (3.7.1)\n",
            "Requirement already satisfied: scipy>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from wfdb->vitaldb) (1.11.4)\n",
            "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.2.2->wfdb->vitaldb) (1.2.0)\n",
            "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.2.2->wfdb->vitaldb) (0.12.1)\n",
            "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.2.2->wfdb->vitaldb) (4.47.0)\n",
            "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.2.2->wfdb->vitaldb) (1.4.5)\n",
            "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.2.2->wfdb->vitaldb) (23.2)\n",
            "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.2.2->wfdb->vitaldb) (9.4.0)\n",
            "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib>=3.2.2->wfdb->vitaldb) (3.1.1)\n",
            "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.1->pandas->vitaldb) (1.16.0)\n",
            "Requirement already satisfied: cffi>=1.0 in /usr/local/lib/python3.10/dist-packages (from SoundFile>=0.10.0->wfdb->vitaldb) (1.16.0)\n",
            "Requirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.0->SoundFile>=0.10.0->wfdb->vitaldb) (2.21)\n",
            "Installing collected packages: wfdb, vitaldb\n",
            "Successfully installed vitaldb-1.4.5 wfdb-4.1.2\n"
          ]
        }
      ],
      "source": [
        "!pip install vitaldb\n",
        "import vitaldb\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "\n",
        "df_cases = pd.read_csv(\"https://api.vitaldb.net/cases\")  # Load clinical data\n",
        "df_trks = pd.read_csv('https://api.vitaldb.net/trks')  # Load track list\n",
        "df_labs = pd.read_csv('https://api.vitaldb.net/labs')  # Load lab result"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "lbUrsNBzV8ok"
      },
      "source": [
        "## Case Selection\n",
        "- Let's use only 100 emergency surgical patients."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "WXeQT1UPWER5",
        "outputId": "22e238bb-80bf-4c82-97f0-f1f87c134192"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Total 100 cases found\n"
          ]
        }
      ],
      "source": [
        "# inclusion / exclusion criteria\n",
        "caseids = list(\n",
        "    set(df_trks.loc[df_trks['tname'] == 'Solar8000/ART_MBP', 'caseid']) &\n",
        "    set(df_cases.loc[df_cases['department'] == 'General surgery', 'caseid']) &\n",
        "    set(df_cases.loc[df_cases['emop'] == 1, 'caseid'])\n",
        ")\n",
        "caseids = caseids[:100]\n",
        "print('Total {} cases found'.format(len(caseids)))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OkpKkCKbWL9B"
      },
      "source": [
        "## Load and calculate data for each case\n",
        "- First of all, calculate the preoperative and postoperative creatinine concentration for each case, and then calculate the possibility that AKI occurs.\n",
        "\n",
        "- Secondly, obtain the ART_MBP data from vitaldb datasets. Then, calculate the proportion of surgeries that have a measured value lower than the threshold between 40-80 mmHg in all surgeries."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "yckBVdfxWQEz",
        "outputId": "8ce9059c-f530-4cdd-eefd-078e3bb6625a",
        "scrolled": true
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "loading 6144...0.5 -> 0.57, no AKI\n",
            "loading 2063..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.71 -> 1.26, AKI\n",
            "loading 4112...no postop cr\n",
            "loading 4115..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.07 -> 0.9, no AKI\n",
            "loading 4116..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.63 -> 0.72, no AKI\n",
            "loading 24...no preop cr\n",
            "loading 29..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.78 -> 0.74, no AKI\n",
            "loading 32...no postop cr\n",
            "loading 4135..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "2.65 -> 2.3, no AKI\n",
            "loading 4144..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "17.74 -> 15.82, no AKI\n",
            "loading 6196..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.82 -> 1.0, no AKI\n",
            "loading 4150...no postop cr\n",
            "loading 4155..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.15 -> 2.19, AKI\n",
            "loading 60..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "9.36 -> 7.95, no AKI\n",
            "loading 2117..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.84 -> 0.89, no AKI\n",
            "loading 4168..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.73 -> 0.62, no AKI\n",
            "loading 2130..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "14.8 -> 9.02, no AKI\n",
            "loading 83..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "8.13 -> 7.36, no AKI\n",
            "loading 87..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "2.72 -> 2.35, no AKI\n",
            "loading 2138...no postop cr\n",
            "loading 2147..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.44 -> 0.52, no AKI\n",
            "loading 4195..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.89 -> 0.96, no AKI\n",
            "loading 2157..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.78 -> 0.74, no AKI\n",
            "loading 4213..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.88 -> 0.66, no AKI\n",
            "loading 6262...no preop cr\n",
            "loading 124..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.63 -> 0.63, no AKI\n",
            "loading 2174..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "5.42 -> 4.63, no AKI\n",
            "loading 4225...no postop cr\n",
            "loading 6273...no preop cr\n",
            "loading 138..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.72 -> 0.65, no AKI\n",
            "loading 6283..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.86 -> 0.77, no AKI\n",
            "loading 143...no preop cr\n",
            "loading 146..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.62 -> 1.8, AKI\n",
            "loading 6290..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.54 -> 1.79, no AKI\n",
            "loading 6292..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "9.47 -> 7.41, no AKI\n",
            "loading 6293..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.94 -> 1.09, no AKI\n",
            "loading 4247..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.95 -> 1.05, no AKI\n",
            "loading 6297..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.79 -> 0.63, no AKI\n",
            "loading 4251..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.98 -> 0.82, no AKI\n",
            "loading 4254..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.83 -> 1.22, no AKI\n",
            "loading 2214...no preop cr\n",
            "loading 6315..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "no postop cr\n",
            "loading 2223...1.52 -> 1.15, no AKI\n",
            "loading 177..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "15.94 -> 14.2, no AKI\n",
            "loading 185..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.45 -> 0.4, no AKI\n",
            "loading 2239...no preop cr\n",
            "loading 6335..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.95 -> 0.98, no AKI\n",
            "loading 2241..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.57 -> 0.54, no AKI\n",
            "loading 4290..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.89 -> 0.79, no AKI\n",
            "loading 4302..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.66 -> 0.74, no AKI\n",
            "loading 2255..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.88 -> 0.72, no AKI\n",
            "loading 4308...no preop cr\n",
            "loading 2265..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.84 -> 0.66, no AKI\n",
            "loading 2272..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.2 -> 1.79, no AKI\n",
            "loading 6372..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.01 -> 0.76, no AKI\n",
            "loading 232...no postop cr\n",
            "loading 4328..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.33 -> 1.78, no AKI\n",
            "loading 239..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.79 -> 1.45, AKI\n",
            "loading 6383..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "6.7 -> 6.14, no AKI\n",
            "loading 242...no postop cr\n",
            "loading 243...no postop cr\n",
            "loading 250..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.79 -> 0.73, no AKI\n",
            "loading 264...no postop cr\n",
            "loading 268..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.86 -> 0.86, no AKI\n",
            "loading 2327..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.61 -> 1.0, AKI\n",
            "loading 2331..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.37 -> 0.99, no AKI\n",
            "loading 284..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "6.82 -> 5.98, no AKI\n",
            "loading 2337..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "8.78 -> 8.65, no AKI\n",
            "loading 2345..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.28 -> 1.15, no AKI\n",
            "loading 4408..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.58 -> 0.63, no AKI\n",
            "loading 2372..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.95 -> 1.03, no AKI\n",
            "loading 2373..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.51 -> 0.55, no AKI\n",
            "loading 4433..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.0 -> 1.07, no AKI\n",
            "loading 349..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.07 -> 1.61, AKI\n",
            "loading 4449..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.21 -> 0.3, no AKI\n",
            "loading 355..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "2.24 -> 1.45, no AKI\n",
            "loading 4465..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "9.27 -> 7.3, no AKI\n",
            "loading 370...no preop cr\n",
            "loading 381...no preop cr\n",
            "loading 2432..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "no preop cr\n",
            "loading 387...2.05 -> 1.49, no AKI\n",
            "loading 4489..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.66 -> 0.76, no AKI\n",
            "loading 2447..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.02 -> 1.12, no AKI\n",
            "loading 4496..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.57 -> 0.53, no AKI\n",
            "loading 406..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "8.96 -> 8.5, no AKI\n",
            "loading 4509..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "10.76 -> 6.83, no AKI\n",
            "loading 415..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.51 -> 0.45, no AKI\n",
            "loading 427..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.91 -> 0.8, no AKI\n",
            "loading 431..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "15.12 -> 13.18, no AKI\n",
            "loading 2480..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.46 -> 0.55, no AKI\n",
            "loading 441...no preop cr\n",
            "loading 4538...no preop cr\n",
            "loading 2494..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.73 -> 0.63, no AKI\n",
            "loading 2501..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.03 -> 1.05, no AKI\n",
            "loading 2504..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.72 -> 0.61, no AKI\n",
            "loading 4556..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.9 -> 0.9, no AKI\n",
            "loading 464...no postop cr\n",
            "loading 2516..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "1.23 -> 1.86, AKI\n",
            "loading 476...no preop cr\n",
            "loading 477..."
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0.58 -> 0.43, no AKI\n",
            "7 AKI 9.2%\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "<ipython-input-3-4ec4a0651c2d>:43: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n",
            "  df = df.append(row, ignore_index=True)\n"
          ]
        }
      ],
      "source": [
        "# Set blood pressure threshold\n",
        "mbp_thresholds = np.arange(40, 80)\n",
        "\n",
        "# Save the final result\n",
        "df = pd.DataFrame()\n",
        "for caseid in caseids:\n",
        "    print('loading {}...'.format(caseid), flush=True, end='')\n",
        "\n",
        "    # Column ['anend'] : anesthesia end time\n",
        "    aneend = df_cases[(df_cases['caseid'] == caseid)]['aneend'].values[0]\n",
        "\n",
        "    # Last creatinine concentration before surgery\n",
        "    preop_cr = df_labs[(df_labs['caseid'] == caseid) & (df_labs['dt'] < 0) & (df_labs['name'] == 'cr')].sort_values(by=['dt'], axis=0, ascending=False)['result'].values.flatten()\n",
        "    if len(preop_cr) == 0:\n",
        "        print('no preop cr')\n",
        "        continue\n",
        "    preop_cr = preop_cr[0]\n",
        "\n",
        "    # Maximum creatinine concentration within 48 hours after surgery\n",
        "    postop_cr = df_labs[(df_labs['caseid'] == caseid) & (df_labs['dt'] > aneend) &\n",
        "        (df_labs['dt'] < aneend + 48 * 3600) & (df_labs['name'] == 'cr')]['result'].max(skipna=True)\n",
        "    if not postop_cr or np.isnan(postop_cr):\n",
        "        print('no postop cr')\n",
        "        continue\n",
        "\n",
        "    # KDIGO stage I\n",
        "    aki = postop_cr > preop_cr * 1.5\n",
        "\n",
        "    # Blood pressure during surgery\n",
        "    mbps = vitaldb.load_case(caseid, 'ART_MBP').flatten()\n",
        "    mbps = mbps[~np.isnan(mbps)]\n",
        "    mbps = mbps[(mbps > 20) & (mbps < 150)]\n",
        "    if len(mbps) < 10:\n",
        "        print('no mbp')\n",
        "        continue\n",
        "\n",
        "    # Calculate the percentage that stays for the time as increasing the blood pressure by 1 unit.\n",
        "    row = {'aki':aki}\n",
        "    for mbp_threshold in mbp_thresholds:\n",
        "        row['under{}'.format(mbp_threshold)] = np.nanmean(mbps < mbp_threshold) * 100\n",
        "\n",
        "    # Append the result into row\n",
        "    df = df.append(row, ignore_index=True)\n",
        "\n",
        "    print('{} -> {}, {}'.format(preop_cr, postop_cr, 'AKI' if aki else 'no AKI'))\n",
        "\n",
        "print('{} AKI {:.1f}%'.format(df['aki'].sum(), df['aki'].mean() * 100))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "YYHU8na4WV-0"
      },
      "source": [
        "## Calculate the odds ratio for AKI prediction depending on blood pressure threshold\n",
        "\n",
        "- Let's calculate the odds ratio regarding how much each BP class increases the risk of AKI, using the above-measured values."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "X5O0yxHJWcjh",
        "outputId": "5e8a5f9d-e423-48b3-dd4f-824174845d5a"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Optimization terminated successfully.\n",
            "         Current function value: 0.278640\n",
            "         Iterations 7\n",
            "under40\tb=0.329, exp(b)=1.390, pval=0.026\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.276060\n",
            "         Iterations 7\n",
            "under41\tb=0.311, exp(b)=1.365, pval=0.022\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.275147\n",
            "         Iterations 7\n",
            "under42\tb=0.285, exp(b)=1.329, pval=0.023\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.269124\n",
            "         Iterations 7\n",
            "under43\tb=0.271, exp(b)=1.312, pval=0.016\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.263108\n",
            "         Iterations 7\n",
            "under44\tb=0.247, exp(b)=1.280, pval=0.010\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.260074\n",
            "         Iterations 7\n",
            "under45\tb=0.212, exp(b)=1.236, pval=0.012\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.257080\n",
            "         Iterations 7\n",
            "under46\tb=0.181, exp(b)=1.199, pval=0.015\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.256225\n",
            "         Iterations 7\n",
            "under47\tb=0.153, exp(b)=1.166, pval=0.021\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.253702\n",
            "         Iterations 7\n",
            "under48\tb=0.135, exp(b)=1.144, pval=0.020\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.248523\n",
            "         Iterations 7\n",
            "under49\tb=0.125, exp(b)=1.133, pval=0.015\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.244306\n",
            "         Iterations 7\n",
            "under50\tb=0.114, exp(b)=1.121, pval=0.010\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.238924\n",
            "         Iterations 7\n",
            "under51\tb=0.104, exp(b)=1.110, pval=0.006\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.238552\n",
            "         Iterations 7\n",
            "under52\tb=0.095, exp(b)=1.100, pval=0.005\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.237661\n",
            "         Iterations 7\n",
            "under53\tb=0.087, exp(b)=1.090, pval=0.004\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.238319\n",
            "         Iterations 7\n",
            "under54\tb=0.080, exp(b)=1.083, pval=0.004\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.239298\n",
            "         Iterations 7\n",
            "under55\tb=0.073, exp(b)=1.076, pval=0.003\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.241085\n",
            "         Iterations 7\n",
            "under56\tb=0.067, exp(b)=1.069, pval=0.003\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.242355\n",
            "         Iterations 7\n",
            "under57\tb=0.062, exp(b)=1.064, pval=0.003\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.243113\n",
            "         Iterations 7\n",
            "under58\tb=0.057, exp(b)=1.059, pval=0.002\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.245366\n",
            "         Iterations 7\n",
            "under59\tb=0.053, exp(b)=1.055, pval=0.003\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.246216\n",
            "         Iterations 7\n",
            "under60\tb=0.050, exp(b)=1.052, pval=0.003\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.248496\n",
            "         Iterations 7\n",
            "under61\tb=0.048, exp(b)=1.049, pval=0.003\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.252137\n",
            "         Iterations 7\n",
            "under62\tb=0.045, exp(b)=1.046, pval=0.004\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.256010\n",
            "         Iterations 7\n",
            "under63\tb=0.042, exp(b)=1.043, pval=0.005\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.260325\n",
            "         Iterations 7\n",
            "under64\tb=0.039, exp(b)=1.040, pval=0.006\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.264558\n",
            "         Iterations 7\n",
            "under65\tb=0.037, exp(b)=1.037, pval=0.009\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.268627\n",
            "         Iterations 7\n",
            "under66\tb=0.034, exp(b)=1.035, pval=0.012\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.272879\n",
            "         Iterations 7\n",
            "under67\tb=0.032, exp(b)=1.033, pval=0.018\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.276888\n",
            "         Iterations 7\n",
            "under68\tb=0.030, exp(b)=1.030, pval=0.026\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.280960\n",
            "         Iterations 7\n",
            "under69\tb=0.028, exp(b)=1.028, pval=0.038\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.284386\n",
            "         Iterations 7\n",
            "under70\tb=0.025, exp(b)=1.026, pval=0.053\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.287273\n",
            "         Iterations 7\n",
            "under71\tb=0.024, exp(b)=1.024, pval=0.071\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.289687\n",
            "         Iterations 7\n",
            "under72\tb=0.022, exp(b)=1.022, pval=0.091\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.292085\n",
            "         Iterations 7\n",
            "under73\tb=0.020, exp(b)=1.021, pval=0.117\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.294417\n",
            "         Iterations 7\n",
            "under74\tb=0.019, exp(b)=1.019, pval=0.150\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.296350\n",
            "         Iterations 7\n",
            "under75\tb=0.017, exp(b)=1.017, pval=0.186\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.297488\n",
            "         Iterations 7\n",
            "under76\tb=0.016, exp(b)=1.016, pval=0.212\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.298386\n",
            "         Iterations 7\n",
            "under77\tb=0.016, exp(b)=1.016, pval=0.236\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.298604\n",
            "         Iterations 7\n",
            "under78\tb=0.016, exp(b)=1.016, pval=0.245\n",
            "Optimization terminated successfully.\n",
            "         Current function value: 0.298320\n",
            "         Iterations 7\n",
            "under79\tb=0.016, exp(b)=1.016, pval=0.240\n"
          ]
        }
      ],
      "source": [
        "import statsmodels.api as sm\n",
        "\n",
        "# Get odd ration using univariate logistic regression\n",
        "df['intercept'] = 1\n",
        "df['aki'] = df['aki'].astype(bool)\n",
        "odd_ratios = []\n",
        "for mbp_threshold in mbp_thresholds:\n",
        "    c = 'under{}'.format(mbp_threshold)\n",
        "    model = sm.Logit(df['aki'], df[['intercept', c]])\n",
        "    res = model.fit()\n",
        "    b = res.params[c]\n",
        "    pval = res.pvalues[c]\n",
        "    odd_ratios.append(np.exp(b))\n",
        "    print('{}\\tb={:.3f}, exp(b)={:.3f}, pval={:.3f}'.format(c, b, np.exp(b), pval))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "baARXo6kWeO4"
      },
      "source": [
        "## Draw a graph\n",
        "- You can find out that the odds ratio of AKI increases as the MBP stays below 60-65mmHg longer.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 449
        },
        "id": "mut5q3MeWnKQ",
        "outputId": "17f1f5d7-2e26-4190-f603-1745408b9e79"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 640x480 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ],
      "source": [
        "import matplotlib.pyplot as plt\n",
        "plt.plot(mbp_thresholds, odd_ratios)\n",
        "plt.xlabel('MBP threshold (mmHg)')\n",
        "plt.ylabel('Odd ratio')\n",
        "plt.show()"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "name": "mbp_aki.ipynb",
      "provenance": [],
      "include_colab_link": true
    },
    "kernelspec": {
      "display_name": "Python 3 (ipykernel)",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.9.12"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}